﻿namespace DataStructure;

//循环数组队列
public class CirSeqListQueue<E> : IQueue<E>
{
    //循环数组作为底层的数据结构
    private CirSeqList<E> list;

    //创建容量为capacity的队列
    public CirSeqListQueue(int capacity)
    {
        list = new CirSeqList<E>(capacity);
    }

    //使用默认的容量创建队列
    public CirSeqListQueue()
    {
        list = new CirSeqList<E>();
    }

    //获取队列元素的个数 O（1）
    public int Count => list.Count;

    //查看队列是否为空 O（1）
    public bool IsEmpty => list.IsEmpty;

    //入队。往队尾添加元素 O（1）
    public void Enqueue(E e) => list.AddLast(e);

    //出队。删除队首的元素 O（1）
    public E Dequeue() => list.RemoveFirst();

    //查看队首的元素 O（1）
    public E Peek() => list.GetFirst();

    //清空循环数组队列
    public void Clear() => list.Clear();

    //打印数组队列信息
    public override string ToString()
    {
        return "Queue: front " + list.ToString() + " tail";
    }
}

class CirSeqListQueue
{
    static void Main(string[] args)
    {
        CirSeqListQueue<int> cirSeqListQueue = new CirSeqListQueue<int>();
        for (int i = 0; i < 5; i++)
        {
            cirSeqListQueue.Enqueue(i);
            Console.WriteLine(cirSeqListQueue);
        }

        cirSeqListQueue.Dequeue();
        Console.WriteLine(cirSeqListQueue);

        Console.Read();
    }
}
